//接收一个对象作为参数
//返回值是一个Promise对象
//根据传入的参数，选择不同的请求方式和请求地址

const myAxios = function(param){

    // 返回一个Promise 的对象
    return new Promise((resolve,reject)=>{

        // 结构一下传的参数
        const {url,method,data,params,} = param

        // 1.new一个实例化xhr对象
        const xhr = new XMLHttpRequest()
        
        // 判断一下请求的方法
        if(method.toUpperCase() === 'GET'){
            // 把Params转化为join字符串的格式,利用封装的函数query
            const str = query(params)
            // 2.设置请求的 地址 和方法
        xhr.open('GET', params? url +'?' + str: url)

        // 3.发送请求
        xhr.send()
        }else{
            xhr.open('POST',url)
            // 判断传入的data是不是对象
            const fals = Object.prototype.toString.call(data) === '[object Object]'
            // 设置请求头
            xhr.setRequestHeader('Content-Type', fals ? 'application/json' : 'application/x-www-form-urlencoded')

            // 调用send 方法
            xhr.send(fals ? JSON.stringify(data) : data)

        }

        // 4.监听xhr的状态
        xhr.onreadystatechange = function(){
            if(xhr.readyState === 4){
                if(xhr.status >=200 && xhr.status < 300){
                    resolve(JSON.parse(xhr.responseText))
                }else{
                    reject('出错了'+xhr.status)
                }
               
            }
        }



    })

}

// 封装一个转换为查询字符串的函数

const query = function (data){
    const arr = []
    for(let key in data){
        arr.push(key+'='+data[key])
    }
    return arr.join('&')
}